package com.itlong.cloud.sdk.dao;

import com.itlong.cloud.POJO.DTO.property.PropertyEquipGetDTO;
import com.itlong.cloud.POJO.DTO.sdk.SDKUnitInfoSaveDTO;
import com.itlong.cloud.POJO.PO.DeviceElevatorAuthPO;
import com.itlong.cloud.POJO.PO.DeviceElevatorBridgeInfoPO;
import com.itlong.cloud.POJO.PO.DeviceElevatorInfoPO;
import com.itlong.cloud.POJO.VO.property.PropertyEquipRecordGetVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      SDK电梯持久层接口：由于放在com.itlong.cloud.sdk.dao包下导致spring莫名扫描不到，现移到com.itlong.cloud.property.dao包下
 * </desc>
 *
 * @createDate 2017/11/14
 */

@Mapper
@Repository
public interface ISDKServerOldElevatorDao extends IAbstractBaseDao<DeviceElevatorInfoPO> {

    /**
     * <desc>
     *      根据参数查询最大设备ID
     * <desc/>
     * @param    params  查询条件集
     * @return  该设备类型的最大deviceId
     * @author Biao.R
     * @createDate 2017/11/14
     */
    Integer getMaxDeviceId(Map<String, Object> params);

    /**
     * <desc>
     *      保存
     * <desc/>
     * @param  map  待保存数据集
     * @return  保存数量
     * @author Biao.R
     * @createDate 2017/11/14
     */
    Integer save(Map<String,Object> map);

    /**
     * <desc>
     *      更新
     * <desc/>
     * @param   params  bean转换层map后的参数集
     * @return
     * @author Biao.R
     * @createDate 2017/9/26
     */
    Integer update(Map<String, Object> params);

    /**
     * <desc>
     *      批量保存电梯地址信息
     * <desc/>
     * @param   saveElevatorBridgeList  待保存的数据信息
     * @return  保存的数量
     * @author Biao.R
     * @createDate 2017/11/14
     */
    Integer batchSaveAddr(List<Map<String,Object>> saveElevatorBridgeList);

    /**
     * <desc>
     *      根据设备唯一码查询设备地址
     * <desc/>
     * @param   deviceUnique    待查询的设备唯一码
     * @return   查询出的设备地址集合
     * @author Biao.R
     * @createDate 2017/11/15
     */
    DeviceElevatorInfoPO getByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据id删除设备归属地址信息
     * <desc/>
     * @param   delIdList   设备归属地数据ID
     * @author Biao.R
     * @createDate 2017/11/15
     */
    void batchDelAddrById(List<String> delIdList);

    /**
     * <desc>
     *      根据设备唯一码查询设备归属地编号信息
     * <desc/>
     * @param       deviceUnique     设备唯一码
     * @return      设备归属地址信息  设备归属地编号信息集
     * @author Biao.R
     * @createDate 2017/11/16
     */
    List<SDKUnitInfoSaveDTO> getAddrNumByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据设备唯一码查询设备归属地址信息
     * <desc/>
     * @param      param    查询参数集
     * @return      设备归属地信息集
     * @author Biao.R
     * @createDate 2017/11/16
     */
    List<DeviceElevatorBridgeInfoPO> getAddrByParams(Map<String, Object> param);


    /**
     * <desc>
     *      条件查询设备通行记录分页数据
     * <desc/>
     * @param   params  查询参数
     * @return  查询结果集
     * @author Biao.R
     * @createDate 2017/11/21
     */
    List<PropertyEquipRecordGetVO> getEquipRecordPage(Map<String, Object> params);

    /**
     * <desc>
     *      条件查询设备通行记录总条数
     * <desc/>
     * @param   params  查询参数
     * @return  查询结果集
     * @author Biao.R
     * @createDate 2017/11/21
     */
    Integer getEquipRecordPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      更新动态密码到电梯权限表
     * <desc/>
     * @param  elevatorAuthPO 待更新的数据
     * @return  更新的数量
     * @author Biao.R
     * @createDate 2017/11/23
     */
    Integer updateDynamicPwd(DeviceElevatorAuthPO elevatorAuthPO);

    /**
     * <desc>
     *      根据参数查询设备（电梯或门禁）
     * <desc/>
     * @param   params  查询参数
     * @return  查询设备结果集
     * @author Biao.R
     * @createDate 2017/11/25
     */
    List<PropertyEquipGetDTO> getEquipByParam(Map<String, Object> params);

    /**
     * <desc>
     *      根据地址，分页查询设备信息
     * <desc/>
     * @param       params  查询参数集
     * @return      分页设备信息
     * @author Biao.R
     * @createDate 2017/11/16
     */
    List<PropertyEquipGetDTO> getPage(Map<String, Object> params);

    /**
     * <desc>
     *      根据地址，分页查询设备总数
     * <desc/>
     * @param       params  查询参数集
     * @return      设备总数
     * @author Biao.R
     * @createDate 2017/11/16
     */
    Integer getPageCount(Map<String, Object> params);

    /**
     * <desc>
     *     根据地址查询电梯信息
     * <desc/>
     * @param  projectId    操作的项目编号
     * @param  buildNumIn     楼栋编号（多个以英文，分隔）
     * @param  unitNumIn      单元编号（多个以英文，分隔）
     * @return 电梯信息集合
     * @author Biao.R
     * @createDate 2018/3/1
     */
    List<PropertyEquipGetDTO> getElevatorByAddress(@Param("projectId") String projectId,
                                                       @Param("buildNumIn") String buildNumIn,
                                                       @Param("unitNumIn") String unitNumIn);
}
